<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
<meta name="viewport"
      content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">

    <meta name="author" content="kissdata">


    <meta name="subtitle" content="人生笔记">


    <meta name="description" content="南邮计算机学院2021毕业生王鹏的介绍，cs软件工程专业">


    <meta name="keywords" content="wangpeng 王鹏 南邮 南京">


<title>🆗 搭建工作用的 CentOS7 | 王鹏的小岛</title>



    <link rel="icon" href="/myIcon.ico">




    <!-- stylesheets list from _config.yml -->
    
    <link rel="stylesheet" href="/css/style.css">
    



    <!-- scripts list from _config.yml -->
    
    <script src="/js/script.js"></script>
    
    <script src="/js/tocbot.min.js"></script>
    



    
    
        <!-- MathJax配置，可通过单美元符号书写行内公式等 -->
<script type="text/x-mathjax-config">
    MathJax.Hub.Config({
    "HTML-CSS": {
        preferredFont: "TeX",
        availableFonts: ["STIX","TeX"],
        linebreaks: { automatic:true },
        EqnChunk: (MathJax.Hub.Browser.isMobile ? 10 : 50)
    },
    tex2jax: {
        inlineMath: [ ["$", "$"], ["\\(","\\)"] ],
        processEscapes: true,
        ignoreClass: "tex2jax_ignore|dno",
        skipTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code']
    },
    TeX: {
        equationNumbers: { autoNumber: "AMS" },
        noUndefined: { attributes: { mathcolor: "red", mathbackground: "#FFEEEE", mathsize: "90%" } },
        Macros: { href: "{}" }
    },
    messageStyle: "none"
    });
</script>
<!-- 给MathJax元素添加has-jax class -->
<script type="text/x-mathjax-config">
    MathJax.Hub.Queue(function() {
        var all = MathJax.Hub.getAllJax(), i;
        for(i=0; i < all.length; i += 1) {
            all[i].SourceElement().parentNode.className += ' has-jax';
        }
    });
</script>
<!-- 通过连接CDN加载MathJax的js代码 -->
<script type="text/javascript" async
        src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML">
</script>


    


<meta name="generator" content="Hexo 7.0.0"></head>

<body>
    <script>
        // this function is used to check current theme before page loaded.
        (() => {
            const currentTheme = window.localStorage && window.localStorage.getItem('theme') || '';
            const isDark = currentTheme === 'dark';
            const pagebody = document.getElementsByTagName('body')[0]
            if (isDark) {
                pagebody.classList.add('dark-theme');
                // mobile
                document.getElementById("mobile-toggle-theme").innerText = "· Dark"
            } else {
                pagebody.classList.remove('dark-theme');
                // mobile
                document.getElementById("mobile-toggle-theme").innerText = "· Light"
            }
        })();
    </script>

    <div class="wrapper">
        <header>
    <nav class="navbar">
        <div class="container">
            <div class="navbar-header header-logo"><a href="/">侠之大者</a></div>
            <div class="menu navbar-right">
                
                    <a class="menu-item" href="/update/mystate">Career</a>
                
                    <a class="menu-item" href="/category">Legend</a>
                
                    <a class="menu-item" href="/about">Me</a>
                
                <input id="switch_default" type="checkbox" class="switch_default">
                <label for="switch_default" class="toggleBtn"></label>
            </div>
        </div>
    </nav>

    
    <nav class="navbar-mobile" id="nav-mobile">
        <div class="container">
            <div class="navbar-header">
                <div>
                    <a href="/">侠之大者</a><a id="mobile-toggle-theme">·&nbsp;Light</a>
                </div>
                <div class="menu-toggle" onclick="mobileBtn()">&#9776; Menu</div>
            </div>
            <div class="menu" id="mobile-menu">
                
                    <a class="menu-item" href="/update/mystate">Career</a>
                
                    <a class="menu-item" href="/category">Legend</a>
                
                    <a class="menu-item" href="/about">Me</a>
                
            </div>
        </div>
    </nav>

</header>
<script>
    var mobileBtn = function f() {
        var toggleMenu = document.getElementsByClassName("menu-toggle")[0];
        var mobileMenu = document.getElementById("mobile-menu");
        if(toggleMenu.classList.contains("active")){
           toggleMenu.classList.remove("active")
            mobileMenu.classList.remove("active")
        }else{
            toggleMenu.classList.add("active")
            mobileMenu.classList.add("active")
        }
    }
</script>
            <div class="main">
                <div class="container">
    
    
        <div class="post-toc">
    <div class="tocbot-list">
    </div>
    <div class="tocbot-list-menu">
        <a class="tocbot-toc-expand" onclick="expand_toc()">Expand all</a>
        <a onclick="go_top()">Back to top</a>
        <a onclick="go_bottom()">Go to bottom</a>
    </div>
</div>

<script>
    var tocbot_timer;
    var DEPTH_MAX = 6; // 为 6 时展开所有
    var tocbot_default_config = {
        tocSelector: '.tocbot-list',
        contentSelector: '.post-content',
        headingSelector: 'h1, h2, h3, h4, h5',
        orderedList: false,
        scrollSmooth: true,
        onClick: extend_click,
    };

    function extend_click() {
        clearTimeout(tocbot_timer);
        tocbot_timer = setTimeout(function() {
            tocbot.refresh(obj_merge(tocbot_default_config, {
                hasInnerContainers: true
            }));
        }, 420); // 这个值是由 tocbot 源码里定义的 scrollSmoothDuration 得来的
    }

    document.ready(function() {
        tocbot.init(obj_merge(tocbot_default_config, {
            collapseDepth: 1
        }));
    });

    function expand_toc() {
        var b = document.querySelector('.tocbot-toc-expand');
        var expanded = b.getAttribute('data-expanded');
        expanded ? b.removeAttribute('data-expanded') : b.setAttribute('data-expanded', true);
        tocbot.refresh(obj_merge(tocbot_default_config, {
            collapseDepth: expanded ? 1 : DEPTH_MAX
        }));
        b.innerText = expanded ? 'Expand all' : 'Collapse all';
    }

    function go_top() {
        window.scrollTo(0, 0);
    }

    function go_bottom() {
        window.scrollTo(0, document.body.scrollHeight);
    }

    function obj_merge(target, source) {
        for (var item in source) {
            if (source.hasOwnProperty(item)) {
                target[item] = source[item];
            }
        }
        return target;
    }
</script>
    

    
    <article class="post-wrap">
        <header class="post-header">
            <h1 class="post-title">🆗 搭建工作用的 CentOS7</h1>
            
                <div class="post-meta">
                    
                        Author: <a itemprop="author" rel="author" href="/">kissdata</a>
                    

                    
                        <span class="post-time">
                        Date: <a href="#">Feb 10, 2024&nbsp;&nbsp;12:00</a>
                        </span>
                    
                    
                        <span class="post-category">
                    Category:
                            
                                <a href="/categories/Work-Experience/">Work Experience</a>
                            
                        </span>
                    
                </div>
            
        </header>

        <div class="post-content">
            <p>刚入职时感觉这方面配置好烦，直接给个现成的多好啊，太消磨人的耐心了<font color="green">（比如虚机连不上网、MySQL 登不上、给虚机换个IP又连不上…）</font>。遇到一个坑就顺手记，总害怕后面忘了。工作几个月后再回顾，会感觉之前自己很sb，写得毫无章法，难怪同事也批评写得烂，误导人 😂。因此记录遇到的坑。</p>
<ul>
<li>环境  <kbd>VMware 17</kbd> + <kbd>CentOS 7</kbd></li>
</ul>
<blockquote>
<p>配置好后重启前先对其打个快照（或者克隆一份），防止后续部署其他项目时，出现意外了可以回退。同时在虚拟机设置里将 “CD&#x2F;DVD” 的设备状态 “启动时连接” 去掉。</p>
<p>初次非root登录后使用 <code>sudo yum</code> 可能会提示 “xxx is not in the sudoers file.” 别慌，需要先 <code>su -</code> 进入 root 登录，修改 <code>/etc/sudoers</code> ，在末尾直接加一行 <code>wangpeng ALL=(ALL) NOPASSWD: ALL</code>。（<code>ubuntu</code> 不是用 <code>su -</code> ，它有自己的切换用户选项）</p>
</blockquote>
<p>开发用的 Linux 最好满足以下：</p>
<ol>
<li>有 vim 编辑工具</li>
<li>gcc、cmake、git 基本工具（gcc、git 更新另附文)</li>
<li>最新版的 go <code>1.22</code>、python <code>3.11</code>、 java <code>21</code>环境</li>
<li>docker 环境</li>
<li>[可选] 公司指定的 <code>xdev</code>, mysql8</li>
</ol>
<p>大体安装顺序是：go - gcc - git - cmake - docker - …</p>
<h2 id="一、配置-CentOS-要求"><a href="#一、配置-CentOS-要求" class="headerlink" title="一、配置 CentOS 要求"></a>一、配置 CentOS 要求</h2><p><strong>1.1 大小设置</strong> </p>
<p>虚拟机不开的情况下不占用内存，放心大胆的设置。默认的 20G 存储大小不够，要 <strong>90</strong> G左右。参考：</p>
<table>
<thead>
<tr>
<th align="center">内存</th>
<th>处理器</th>
<th>总大小</th>
</tr>
</thead>
<tbody><tr>
<td align="center">4 G</td>
<td>2个</td>
<td>99 G</td>
</tr>
</tbody></table>
<p>这里的存储最好多给点，尤其是给 docker 用的时候，一个 base 镜像有三四个G，多 pull 几个基础镜像就可能不够用了。</p>
<p><strong>1.2 使用方式</strong></p>
<p>主要用 root 账户登录，不然一开始看以为有两个 home 目录，新手容易弄错。</p>
<p>不要安装界面。</p>
<p><strong>1.3 镜像选择</strong></p>
<p>原先我搞错了，以为 iso 必须用公司配好的，以为安装方法和网上的有不一样的地方，其实一样的，浪费了不少时间。其实Centos7 可以直接从 <a target="_blank" rel="noopener" href="https://mirrors.huaweicloud.com/centos/7/isos/x86_64/">hw云镜像</a> 下载，主要是 DVD版（不能是Minimal镜像包）。参考外面的文档安装Linux时，有些步骤可省，比如换源。</p>
<p>后续开发其他方面，数据库(MySQL等)、消息队列(Kafka等) 还是用公司的，这些从原网下载后配置很烦，而且用公司配好的，可以和同事的保持一致。</p>
<blockquote>
<p>一般不用更新 GCC，默认的4.8.5足够。但引用有的新第三方包时需要，最好更新下。</p>
</blockquote>
<p><img src="/image/review_centos7/needupdategcc.png"></p>
<h2 id="二、安装Centos7关键步骤"><a href="#二、安装Centos7关键步骤" class="headerlink" title="二、安装Centos7关键步骤"></a>二、安装Centos7关键步骤</h2><h3 id="2-1-连接网络设置。"><a href="#2-1-连接网络设置。" class="headerlink" title="2.1 连接网络设置。"></a>2.1 连接网络设置。</h3><p>VMware 设置 centos7 条件，注意连接网络<strong>选桥接</strong>网络，并且下面不打勾。<code>坑1</code> 如果选了其他，后面在centos里可能连不上网，或者连上网了 ping不到主机。</p>
<p><img src="/image/review_centos7/centos_set1.png"></p>
<h3 id="2-2-安装中的设置。"><a href="#2-2-安装中的设置。" class="headerlink" title="2.2 安装中的设置。"></a>2.2 安装中的设置。</h3><p>点击<strong>开启此虚拟机</strong>，开始会有一段检查，赶紧按 <code>Esc</code> 跳过，不然检测不通过。</p>
<p>本地化(Localization)的语言选项，增加中文。</p>
<p>先打开下方的系统(SYSTEM)的网络连接，再设置本地化里的时间日期；软件选最下面 “开发及生成工作站”(Development and Creative Workstation)，不能是默认的最小安装。</p>
<p>【安装分区】注意分区设置完成后，第一行会标红“Destory Format”，不用管，点<strong>接受改变</strong>。3个分区参考：</p>
<figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">  分区       大小</span><br><span class="line">--------------------</span><br><span class="line">  /boot	    <span class="number">500</span>M</span><br><span class="line">  swap	    <span class="number">4</span>G</span><br><span class="line">  /         剩余</span><br></pre></td></tr></table></figure>

<p>【设置用户】root用户和user用户都要设置，不设user的话重启后后续还是要设置。</p>
<h3 id="2-3-安装后的设置。"><a href="#2-3-安装后的设置。" class="headerlink" title="2.3 安装后的设置。"></a>2.3 安装后的设置。</h3><p>【查看 ip】安装完成后，先查看ip地址，因为后面要用 xshell 连接</p>
<p><img src="/image/review_centos7/centos_set2.png"></p>
<p>如果提示没有该命令，用 <code>ip addr</code> 代替，或者安装ifconfig命令（输入 <code>yum install net-tools</code> ）</p>
<p>【关闭防火墙】默认防火墙是打开的。</p>
<p><img src="/image/review_centos7/centos_set6.png"></p>
<p><code>systemctl stop firewalld.service</code>  关闭防火墙，这样所有的端口从外面都能访问。</p>
<h2 id="三、Linux内的安装"><a href="#三、Linux内的安装" class="headerlink" title="三、Linux内的安装"></a>三、Linux内的安装</h2><p>首先确认前一步防火墙已经关闭。如果不想关闭，用到哪个端口时，需要打开端口：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">netstat -an | grep 3306		# 查看端口有没有开放</span><br><span class="line">firewall-cmd --permanent --zone=public --add-port=2023/tcp</span><br><span class="line">...</span><br><span class="line">firewall-cmd --reload</span><br></pre></td></tr></table></figure>

<h3 id="3-1-常用命令的工具。"><a href="#3-1-常用命令的工具。" class="headerlink" title="3.1 常用命令的工具。"></a>3.1 常用命令的工具。</h3><p>进入后 先确认 <code>wget</code> 、<code>ifconfig</code> 、 <code>systemctl</code> 等命令都能按，没有就 下载。</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">yum -y install wget \</span><br><span class="line">  tree \</span><br><span class="line">  lrzsz \</span><br><span class="line">  strace</span><br><span class="line">yum install -y lsof      # 安装查看文件打开情况的命令 lsof list open files</span><br><span class="line">yum install -y net-tools # 用里面的 ifconfig 命令（不然只能 ip addr）</span><br></pre></td></tr></table></figure>

<p>比如上传文件命令默认没有，需要安装</p>
<p><img src="/image/review_centos7/centos_set4.png"></p>
<p>使用方法：rz后自动打开选择文件窗口，点击后自动上传。</p>
<p><img src="/image/review_centos7/centos_set5.png"></p>
<p>CentOS 默认只有一种 shell 环境（bash）， <code>cat /etc/shells</code> 可以可能到已经安装的。</p>
<p>【额外的库】以后安装其他东西经常需要，提前安装好</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">yum -y install zlib zlib-devel</span><br><span class="line">yum -y install krb5-devel krb5-*   <span class="comment"># Kerberos</span></span><br></pre></td></tr></table></figure>

<h3 id="3-2-安装公司专用驱动。"><a href="#3-2-安装公司专用驱动。" class="headerlink" title="3.2 安装公司专用驱动。"></a>3.2 安装公司专用驱动。</h3><p>【安装<code>XDev</code>】<code>Xdev</code> 是公司的进程守护工具，需要安装，装完后<strong>必须重启</strong> 。</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">tar zxvf xdev-xdev-install-2022* # 解压 tar.gz</span><br><span class="line">cd xdev-*</span><br><span class="line">ll	# 看看，确认有安装脚本</span><br><span class="line">sh module_install.sh install</span><br><span class="line">reboot</span><br></pre></td></tr></table></figure>

<p>在root提示前面多出 [xdev]才表示它安装成功，通俗的说就是 “起来了”。</p>
<p><img src="/image/review_centos7/centos_set7.png"></p>
<blockquote>
<p>linux目录学习 参考 <a target="_blank" rel="noopener" href="https://www.linuxbaike.com/linuxmulu/">Linux各目录介绍</a></p>
</blockquote>
<h3 id="3-3-安装公司-MySQL8"><a href="#3-3-安装公司-MySQL8" class="headerlink" title="*3.3 安装公司 MySQL8"></a>*3.3 安装公司 MySQL8</h3><p>【安装】优先通过公司的mysql包安装，参考 是 📘 <a target="_blank" rel="noopener" href="https://ae85.gitee.io/2022/10-3/centos_sql/">CentOS7 安装 MySQL8</a></p>
<p>【创建项目用户】创建使用mysql的普通用户：</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">create database friendsdb default character set utf8 collate utf8_general_ci;</span><br><span class="line">create user &#x27;wangpeng&#x27;@&#x27;%&#x27; identified by &#x27;like2022&#x27;;</span><br><span class="line">grant all on friendsdb.* to &#x27;wangpeng&#x27;;</span><br><span class="line">flush privileges;</span><br></pre></td></tr></table></figure>

<p>navicat连接时可能有防火墙问题，这里需要开放</p>
<figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">firewall-cmd --permanent --zone=public --add-port=3306/tcp</span><br></pre></td></tr></table></figure>



<h2 id="四、部署公司的应用"><a href="#四、部署公司的应用" class="headerlink" title="四、部署公司的应用"></a>四、部署公司的应用</h2><p>后端开发出包（比如http服务），部署到Linux运行。需要先自测（后面测试环境、生产环境测试，总共有3个环节测试）</p>
<h3 id="4-1-安装-C-环境"><a href="#4-1-安装-C-环境" class="headerlink" title="4.1 安装 C 环境"></a>4.1 安装 C 环境</h3><p>通过 devtoolset 安装教新版 <code>gcc</code>， 📓 <a href="/2022/10-2/tool_gcc/">linux 更新 gcc</a> （v11.2+）</p>
<p>通过直接下载二进制包安装新版 <code>cmake</code>， 📓 <a href="/2023/11-1/tool_cmake/">linux 安装 cmake</a> （v2,28+）</p>
<p>有了C环境，再安装最新版的 <code>git</code>, 📓 <a href="/2023/11-22/tool_git/">安装git</a></p>
<h3 id="4-1-安装-go-环境"><a href="#4-1-安装-go-环境" class="headerlink" title="4.1 安装 go 环境"></a>4.1 安装 go 环境</h3><ol>
<li><p>下载，最新版 <code>go1.22+</code></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># tar 包统一下载放 /opt 目录</span></span><br><span class="line">sudo wget -P /opt https://go.dev/dl/go1.22.0.linux-amd64.tar.gz</span><br><span class="line"><span class="comment"># 包内容固定安装在 /usr/local/etc 目录</span></span><br><span class="line">sudo <span class="built_in">rm</span> -rf /usr/local/etc/go</span><br><span class="line">tar -C /usr/local/etc -xzf go1.22.*</span><br></pre></td></tr></table></figure>
</li>
<li><p>设置环境变量</p>
</li>
</ol>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">vim /etc/profile</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">vim /etc/profile.d/wangpeng.sh</span></span><br><span class="line">export PATH=$PATH:/usr/local/etc/go/bin</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash"><span class="built_in">echo</span> <span class="string">&#x27;PATH=\$PATH:/usr/local/etc/go/bin&#x27;</span> &gt;&gt; /etc/profile</span></span><br><span class="line">source /etc/profile</span><br></pre></td></tr></table></figure>

<p>写入 <code>PATH</code> 的文件可以是 profile 本身，也可以在 <code>/etc/profile.d</code> 里面新建一个脚本，最后都是 source profile 本身就行。使用 <code>vim</code> 在设置环境变量时按i输入，为了 <code>go/bin</code> 加入PATH，也可以 <code>vim /root/.bashrc</code> 。如果不想用 vim，也可以建立软连接。</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">ln</span> -s /usr/local/etc/go/bin/* /usr/bin/ </span><br></pre></td></tr></table></figure>

<p>建立软连接比设置环境变量快，两种方法选一个就行。</p>
<ol start="3">
<li>配置导入包下载环境</li>
</ol>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">go env -w GOPRIVATE=https://go.pfgit.cn</span><br><span class="line">go env -w GOPROXY=https://proxy.golang.com.cn,direct</span><br><span class="line">go env -w GO111MODULE=on</span><br><span class="line">go env -w GOSUMDB=off</span><br></pre></td></tr></table></figure>

<p>具体在 VS Code 中装 go 运行环境另附文。</p>
<h3 id="4-2-安装-python-环境"><a href="#4-2-安装-python-环境" class="headerlink" title="4.2 安装 python 环境"></a>4.2 安装 python 环境</h3><p>两种方法。一种是直接下载 conda 就行，里面自带了 python，相关步骤网文很多。这里给出 <strong>编译安装</strong> 的方法。</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">下载</span></span><br><span class="line">wget --no-check-certificate https://www.python.org/ftp/python/3.13.0/Python-3.13.0.tgz</span><br><span class="line">tar zxf Python-3*</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">创建安装目录</span></span><br><span class="line">mkdir /usr/local/python3</span><br><span class="line">chmod -R 777 /usr/local/python3</span><br><span class="line"></span><br><span class="line">cd Python-3.11.7</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">创建编译目录</span></span><br><span class="line">mkdir build</span><br><span class="line">chmod -R 777 build</span><br><span class="line">cd build</span><br><span class="line">../configure --prefix=/usr/local/python3</span><br><span class="line">make -j4</span><br><span class="line">make instal</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">软链接, 配置系统路径</span></span><br><span class="line">ln -s /usr/local/python3/bin/python3 /usr/local/bin/python3</span><br><span class="line">ln -s /usr/local/python3/bin/pip3 /usr/local/bin/pip3</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">验证</span></span><br><span class="line">python3 -v  # 小写的v</span><br><span class="line">pip3 -V     # 大写的v</span><br></pre></td></tr></table></figure>

<p>注意：</p>
<ol>
<li>python3 下载很慢，建议采用 rz上传方式</li>
<li>一定要先创建编译安装的目录。</li>
<li><strong>安装完成后，关闭虚机打个快照再继续</strong></li>
</ol>
<h3 id="4-3-安装docker环境"><a href="#4-3-安装docker环境" class="headerlink" title="4.3 安装docker环境"></a>4.3 安装docker环境</h3><p>软件部署到其他地方，需要打镜像。生产环境的包在1.99，自测的话最好有一个。</p>
<p><img src="/../image/knowledge_docker/steps.png"></p>
<p>比如在docker安装 <code>libvips</code>： <a target="_blank" rel="noopener" href="https://github.com/jcupitt/docker-builds/tree/master/libvips-centos7">https://github.com/jcupitt/docker-builds/tree/master/libvips-centos7</a></p>
<h2 id="五、Centos7-工作方式"><a href="#五、Centos7-工作方式" class="headerlink" title="五、Centos7 工作方式"></a>五、Centos7 工作方式</h2><p>【xshell7 连接】新建连接后，把“ssh - 隧道”的 “X11转移” 取消勾选。<code>坑2</code> 不然每次登陆进入前会 <code>WARNING! The remote SSH server rejected X11 forwarding request.</code></p>
<p>连接时接受密码，以后就可以直接登陆。</p>
<p><img src="/image/review_centos7/centos_set3.png"></p>
<h2 id="附"><a href="#附" class="headerlink" title="附"></a>附</h2><ul>
<li><p>mofan Linux基础 <a target="_blank" rel="noopener" href="https://mofan212.github.io/posts/The-Basics-Of-Linux-Part-One/">📕 上篇</a>  <a target="_blank" rel="noopener" href="https://mofan212.github.io/posts/The-Basics-Of-Linux-Part-Two/">📕 下篇</a></p>
</li>
<li><p>Shrimp (河北) <a target="_blank" rel="noopener" href="https://shrimp_study.gitee.io/2020/112422409.html">Linux开发环境</a></p>
</li>
<li><p>归档 pdf <a target="_blank" rel="noopener" href="https://gitee.com/AE85/personal-docs/raw/master/basic/env_develop_go.pdf">Go语言开发环境搭建</a></p>
</li>
</ul>

        </div>

        
            <section class="post-copyright">
                
                
                
                
                     <p class="copyright-item">
                         <span>Slogan:</span>
                         <span>人生三大错觉：我躲得过去，我能反杀，是不是<strong>喜欢我?</strong></span>
                     </p>
                

            </section>
        
        <section class="post-tags">
            <div>
            </div>
            <div>
                <a href="javascript:window.history.back();">back</a>
                <span>· </span>
                <a href="/">home</a>
            </div>
        </section>
        <section class="post-nav">
            
                <a class="prev" rel="prev" href="/2024/03-10/ability_knowledge/">知识进度 timeline</a>
            
            
            <a class="next" rel="next" href="/2024/01-1/tool_cmake/">⛵ Linux 安装最新版cmake</a>
            
        </section>


    </article>
</div>

            </div>
            <footer id="footer" class="footer">
    <div class="copyright">
        <span>187-9597-5517 &nbsp; 王鹏 @ <a href="https://cs.njupt.edu.cn/" target="_blank">njupt</a</span>
    </div>
</footer>

    </div>
</body>

</html>